package procesador;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class Process {

	Process back;//apuntador al nodo anterior
	Process next;//apuntador al nodo siguiente
	String addressIcon;//direccion del icono
	String name;//nombre de proceso
	char state;//estado actual del proceso
	short priority;//prioridad del proceso
	short quantum;//quantum restante del proceso
	short pid;//identificador del proceso
	float qt;//quantum total del proceso
	boolean suspentionFlag;//bandera para determinar si el proceso necesita interaccion
	int x;//cordenada x del label en el panel de inactivos
	int y;//cordenada y del label en el panel de inactivos
	JLabel icon;//label que llevara el icono del proceso


	public Process(String nm, String adrIcon) {//metodo constructor
		//asignacion inicial de atributos
		name=nm;
		addressIcon=adrIcon;
		next=null;//porque no esta enlazado aun
		back=null;
		state='I';
		priority=6;// 6 para indicar que no tiene prioridad asignada
		quantum=-1;//-1 para indicar que no tiene quantum asignado
		qt=0;
		pid=-1;//-1 para indicar que no tiene pid asignado
		suspentionFlag=false;//porque esta inactivo
		y=0;//porque no se ha asignado al panel aun
		x=0;
		icon = new JLabel();
		addLabel();//para que el label cargue los escuchadores


	}

	public float getProgres(){//calcula y retorna cuanto se ha procesado
		float sub;

		if(qt==0){
			return 0;
		}
		sub=((qt-(float)quantum)/qt)*100;
		return sub;
	}

	public void addLabel(){//asigna caracteristicas y escuchadores al label

		icon.setIcon(new ImageIcon(addressIcon));//se carga la imagen en el label
		icon.setToolTipText(name);// para que al posicionar el mouse sobre el aparesca el label nombre del proceso

		icon.addMouseMotionListener(new MouseMotionListener() {//para asignar arrastrar 

			@Override
			public void mouseMoved(MouseEvent e) {}

			@Override
			public void mouseDragged(MouseEvent e) {
				int y1=(icon.getY() + e.getY() - icon.getHeight()/2);//para colocar el centro del icono en la punta del mouse
				int x1=(icon.getX() + e.getX() - icon.getWidth() /2);//para colocar el centro del icono en la punta del mouse
				if(icon.isEnabled()==true){//valida que aun este inactivo

					icon.setLocation(x1,y1);
				}

			}
		});

		icon.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
				if(icon.isEnabled()==true)//valida que aun este inactivo
					icon.setLocation(x,y);//en caso de que se haya soltado en coordenadas sin accion

			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub

			}
		});

	}
}
